package com.szgz.platform.model;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 任务步骤完成记录实体类
 * 对应task_step_completions表
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("task_step_completions")
public class TaskStepCompletion {

    /**
     * 完成记录唯一标识符
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 任务ID
     */
    @TableField("task_id")
    private Long taskId;

    /**
     * 步骤ID
     */
    @TableField("step_id")
    private Long stepId;

    /**
     * 用户ID
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 完成状态：not_started(未开始), in_progress(进行中), completed(已完成), failed(失败), skipped(已跳过)
     */
    @TableField("completion_status")
    private String completionStatus;

    /**
     * 开始时间
     */
    @TableField("started_at")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startedAt;

    /**
     * 完成时间
     */
    @TableField("completed_at")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime completedAt;

    /**
     * 实际花费时间（分钟）
     */
    @TableField("time_spent")
    private Integer timeSpent;

    /**
     * 实际得分
     */
    @TableField("score")
    private BigDecimal score;

    /**
     * 教师反馈
     */
    @TableField("feedback")
    private String feedback;

    /**
     * 提交内容，可以是代码、答案、文件等
     */
    @TableField("submission_content")
    private String submissionContent;

    /**
     * 提交的文件，JSON格式存储文件信息
     */
    @TableField("submission_files")
    private String submissionFiles;

    /**
     * 尝试次数
     */
    @TableField("attempts")
    private Integer attempts;

    /**
     * 最大尝试次数
     */
    @TableField("max_attempts")
    private Integer maxAttempts;

    /**
     * 是否逾期提交：1-逾期，0-按时
     */
    @TableField("is_late")
    private Boolean isLate;

    /**
     * 扩展元数据
     */
    @TableField("metadata")
    private String metadata;

    /**
     * 创建时间
     */
    @TableField(value = "created_at", fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    @TableField(value = "updated_at", fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updatedAt;

    // 非数据库字段，用于业务逻辑

    /**
     * 任务信息
     */
    @TableField(exist = false)
    private Task task;

    /**
     * 步骤信息
     */
    @TableField(exist = false)
    private TaskStep step;

    /**
     * 用户信息
     */
    @TableField(exist = false)
    private User user;

    /**
     * 完成状态枚举
     */
    public enum CompletionStatus {
        NOT_STARTED("not_started", "未开始"),
        IN_PROGRESS("in_progress", "进行中"),
        COMPLETED("completed", "已完成"),
        FAILED("failed", "失败"),
        SKIPPED("skipped", "已跳过");

        private final String code;
        private final String label;

        CompletionStatus(String code, String label) {
            this.code = code;
            this.label = label;
        }

        public String getCode() {
            return code;
        }

        public String getLabel() {
            return label;
        }

        public static CompletionStatus fromCode(String code) {
            for (CompletionStatus status : values()) {
                if (status.code.equals(code)) {
                    return status;
                }
            }
            return NOT_STARTED;
        }
    }
} 